package com.zmn.oms.dubbo.interfaces.zmn.normal.order;

import com.zmn.common.dto2.ResponseDTO;
import com.zmn.oms.common.constant.OrderGateTypeConsts;
import com.zmn.oms.common.dio.schedule.GridGroupScheduleCheckDIO;
import com.zmn.oms.common.dro.schedule.GridGroupScheduleCheckDRO;
import com.zmn.oms.dubbo.dto.zmn.order.*;
import com.zmn.oms.dubbo.dto.zmn.orderstock.StockScheduleTimeDIO;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 类描述：普通单预约时间
 *
 * @author liuying
 * @date 2019/01/08 15:35
 */
public interface ZsNormalOrderWorkScheduleRemoteService {

    /**
     * 是否应用动态库存
     *
     * @return
     */
    ResponseDTO<Boolean> isApplyStock(StockWhiteDIO stockWhiteDIO);

    /**
     * 获取预约排期日期
     *
     * @return
     */
    ResponseDTO<List<OrderScheduleDayDRO>> getScheduleDayList();

    /**
     * 获取预约排期时间
     *
     * @param scheDate yyyy-MM-dd
     * @return
     */
    ResponseDTO<OrderScheduleTimeDRO> getScheduleTimes(@NotNull(message = "预约日期不能为空") String scheDate);

    /**
     * 预约时间列表 48个时刻点
     * 包含 校验库存
     *
     * @param orderScheduleDIO
     * @return
     */
    ResponseDTO<OrderScheduleTimeDRO> getScheduleTimesAndCheckStock(@NotNull(message = "预约参数不能为空") OrderScheduleDIO orderScheduleDIO);

    /**
     * 预约时间列表 96个时刻点
     * @param stockScheduleTimeDIO
     * @return
     */
    ResponseDTO<OrderScheduleTimeDRO> getStockScheduleTimes(@NotNull(message = "参数不能为空") StockScheduleTimeDIO stockScheduleTimeDIO);

    /**
     * 默认预约时间
     *
     * @param plat
     * @param geteType
     * @return
     * @see OrderGateTypeConsts
     */
    ResponseDTO<String> defaultScheduleTime(@NotNull(message = "平台标示不能为空") Integer plat,
                                            @NotNull(message = "平台预约常量不能为空") Integer geteType);

    /**
     * 购物车预约时间
     * 包含 校验库存
     *
     * @param orderScheduleList
     * @return
     */
    ResponseDTO<List<OrderCartScheduleTimeDRO>> listOrderCartScheduleTime(@NotNull(message = "预约参数集合不能为空") List<OrderCartScheduleDIO> orderScheduleList);



    /**
     * 默认预约时间
     * 包含 校验库存
     * @param orderScheduleList
     * @return
     */
    ResponseDTO<List<OrderCartScheduleTimeDRO>> listStockDefaultDutyTime(@NotNull(message = "预约参数集合不能为空") List<OrderCartStockScheduleDIO> orderScheduleList);


    /**
     * 网格组排期查询
     * @param gridGroupScheduleCheckList
     * @return
     */
    ResponseDTO<List<GridGroupScheduleCheckDRO>> listGridGroupAvailableEngineer(@NotNull(message = "排期校验入参不能为空") List<GridGroupScheduleCheckDIO> gridGroupScheduleCheckList);

}